<?php

namespace app\admin\controller;

use app\admin\model\Admin;
use app\admin\model\AdminLog;
use think\Controller;
use think\Cookie;
use think\Loader;
use think\Request;
use think\Session;
use think\Validate;
use tools\jwt\Token;

class Login extends Controller
{

    /**
     * 登录页面
     * @return \think\response\View
     */
    public function login()
    {
        $userId = Cookie::get('userid');
        if ($userId) {
            //3天免登陆
            $this->redirect('admin/index/index');
        }

        // 临时关闭当前模板的布局功能
        $this->view->engine->layout(false);
        return view();//渲染视图
    }

    /**
     * 处理登录逻辑
     */
    public function doLogin()
    {
        //1. 接受参数
        $post = $this->request->post();
        //2. 参数验证  -- 验证器
        $validate = Loader::validate('Admin');
        if (!$validate->scene('login')->check($post)) { //$validate->check($post)  返回true 或者 false
            //验证失败时走这里
            //重定向 error
            return getJsonData(100010, $validate->getError());
        }

        //3. 查询数据  //查询管理员信息
        $where = [
            'username' => $post['username'],
            'password' => md5($post['password']),
        ];

        $adminInfo = Admin::getAdminInfo($where);
        if (empty($adminInfo)) {
            return getJsonData(10010, '用户不存在');
        }
        //用户密码不正确
        //添加登录日志
        //更新用户登录时间

        //记录用户信息 发放token

        //4. 数据处理
        //添加登录日志
        // ip2long  127.0.0.1 => 2130706433  ip 转化成 数字
        // long2ip  2130706433 => 127.0.0.1  数字 转化成 ip
        $addLogData = [
            'user_id' => $adminInfo['id'],
            'ip' => ip2long(\request()->ip()), // 127.0.0.1 => 2130706433  转化成数字
            'log_desc' => $adminInfo['nickname'] . ' 登录',
        ];
        AdminLog::addLoginLog($addLogData);
        //更新用户登录时间
        $upData = [
            'last_login_time' => time(),
        ];
        Admin::modifyAdminInfo($upData, $adminInfo['id']);

        //第一种
//      Session::set('nickname', $adminInfo['nickname']);
        Session::set('userInfo', $adminInfo);
        //3天免登陆
        if (isset($post['isLogin']) && !empty($post['isLogin'])) {
            Cookie::set('userid', $adminInfo['id'], 3600 * 24 * 3);
        }

        //生成token令牌
        $token = Token::createToken($adminInfo['id']);
        Session::set('token', $token);

        $adminInfo['token'] = $token;
        //查询用户权限
        $userNode = Admin::getUserNodeAll($adminInfo['id']);
        Session::set('userNode',$userNode);

        //5. 返回数据
        return getJsonData(200, 'success', $adminInfo);
    }

    /**
     * 退出登录
     */
    public function logout()
    {
        //清空session
        \session('nickname', null);

        $this->success('退出成功....', 'admin/login/login');
    }
}
